#include "../code/defs.h"

const double MAXVALOR = 5000;

/* Recibe un archivo de entrada y realiza estadística, mínimo, máximo,
 * media y mediana. */
int main(int argc, char* argv[])
{    
    string nombre_minmax, nombre_media, nombre_mediana, nombre_entrada;
    
    if (argc == 2)
	{
		string nombre = argv[1];
		nombre_entrada = nombre + "Datos.out";
		nombre_minmax = nombre + "MinMax.out";
		nombre_media = nombre + "Media.out";
		nombre_mediana = nombre + "Mediana.out";		
	}
    else
    {
        cout << "Se necesita un parámetro, el nombre del archivo a utilizar. Este debe ser de la forma 'nombreDatos.out' y debe ingresarse como input solamnete el nombre." << endl;
        exit(1);
    }
    
    ifstream entrada(nombre_entrada.c_str());
    ofstream minmax(nombre_minmax.c_str());
    ofstream prom(nombre_media.c_str());
    ofstream med(nombre_mediana.c_str());
    
    int aux_n;
    double max, min, suma, promedio, mediana, valor;
    
    fornx(n, 2, 51)
    {
		max = suma = promedio = mediana = valor = 0;
		min = MAXVALOR;		
		
		Vector valores (100);		
		
		/* Leo n, ya sé cuánto vale. */
		entrada >> aux_n;
		if (n != aux_n)
		{
			cerr << "El valor de n no es el correcto" << endl;
			exit(1);
		}
			
		forn(i, 100)
		{
			/* Leer el valor. */
			entrada >> valor;			
			valores[i] = valor;
			
			if (valor < min)
				min = valor;
			
			if (valor > max)
				max = valor;
				
			suma += valor;
		}
		
		promedio = suma/100;
		/* Ordenar para encontrar la mediana. */		
		sort(valores.begin(), valores.end());
		mediana = (valores[49] + valores[50])/2;
		
		minmax << n << " " << min << " " << max << endl;
		prom << n << " " << promedio << endl;
		med << n << " " << mediana << endl;		
	}
	
	entrada.close();
	minmax.close();
	prom.close();
	med.close();
    
    return 0;
}
